package com.ptv.backupalumnos;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import android.app.ProgressDialog;
import android.content.Context;
import android.database.SQLException;
import android.os.AsyncTask;
import android.widget.Toast;

import com.ptv.database.AlumnosBDAdapter;
import com.ptv.teachaclass.MainActivity;

public class ImportarBDFileTask extends AsyncTask<String, Void, Boolean> {

	private final ProgressDialog dialogo;
	private Context contexto;
	private AlumnosBDAdapter bdAdapter;
	private MainActivity actividad;
	private String mensajeImportando,errorImportando,errorLecturaAccesoFicheros,importacionOK;
	
	public ImportarBDFileTask (Context contexto, AlumnosBDAdapter bdAdapter,String mensajeImportando,String errorImportando,String errorLecturaAccesoFicheros,
			String importacionOK){
		dialogo = new ProgressDialog(contexto);
		this.contexto=contexto;
		this.bdAdapter= bdAdapter;
		this.actividad=(MainActivity) contexto;
		this.mensajeImportando = mensajeImportando;
		this.errorImportando = errorImportando;
		this.errorLecturaAccesoFicheros = errorLecturaAccesoFicheros;
		this.importacionOK = importacionOK;
	}
	
	protected void onPreExecute() {
		this.dialogo.setMessage(mensajeImportando);
		this.dialogo.show();
	}
	
	@Override
	protected Boolean doInBackground(final String... args) {

		File dir = android.os.Environment.getExternalStorageDirectory();
		File importFile = new File(dir, "BackupTeachAClass/copia_seguridad_alumnos.csv");
		if (!importFile.exists()) {
			if (this.dialogo.isShowing()) {
				this.dialogo.dismiss();
			}
			Toast.makeText(contexto, errorImportando, Toast.LENGTH_SHORT).show();
			return false;
		}

		try{
			bdAdapter.getBD().beginTransaction();
			bdAdapter.borraTodosLosAlumnos();
			BufferedReader fin =
					new BufferedReader(new InputStreamReader(new FileInputStream(importFile)));
			String auxStr = "";
			fin.readLine();
			while ((auxStr = fin.readLine()) != null){
				String[] DatosRegistro = auxStr.split(";");

				for (int i=0; i<DatosRegistro.length; i++)
					if (DatosRegistro[i].equals("#")) DatosRegistro[i]="";
				bdAdapter.crearAlumno(DatosRegistro[1], DatosRegistro[2], DatosRegistro[3], DatosRegistro[4], DatosRegistro[5],
						DatosRegistro[6], ("1".equals(DatosRegistro[7])),
						("1".equals(DatosRegistro[8])), ("1".equals(DatosRegistro[9])),("1".equals(DatosRegistro[10])),
						("1".equals(DatosRegistro[11])),("1".equals(DatosRegistro[12])),("1".equals(DatosRegistro[13])),
						DatosRegistro[14],DatosRegistro[15],Float.valueOf(DatosRegistro[16]),Float.valueOf(DatosRegistro[17]),
						DatosRegistro[18],DatosRegistro[19]);
			}
			fin.close();

			bdAdapter.getBD().setTransactionSuccessful();
			return true;
		} catch (SQLException e) {
			if (this.dialogo.isShowing()) {
				this.dialogo.dismiss();
			}
			Toast.makeText(contexto, errorImportando, Toast.LENGTH_SHORT).show();
			return false;
		} catch (IOException e) {
			if (this.dialogo.isShowing()) {
				this.dialogo.dismiss();
			}
			Toast.makeText(contexto, errorLecturaAccesoFicheros, Toast.LENGTH_SHORT).show();
			return false;
		} finally {
			bdAdapter.getBD().endTransaction();

		}
	}

	protected void onPostExecute(final Boolean success) {
		if (this.dialogo.isShowing()) {
			this.dialogo.dismiss();
		}
		if (success) {
			Toast.makeText(contexto, importacionOK, Toast.LENGTH_SHORT).show();
		} else {
            Toast.makeText(contexto, errorImportando, Toast.LENGTH_SHORT).show();
        }
		actividad.refrescarDatos();
	}	
}
